/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package controladores;

import entidades.NotaEntrada;
import entidades.Usuario;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;

/**
 *
 * @author fcarou
 */
public class NotaEntradaJpaController extends BaseControlador
{
    public NotaEntradaJpaController ()
    {
        super ();
    }
    
    public NotaEntradaJpaController (EntityManager em)
    {
        super (em);
    }
    
    /**
     * Obtiene una lista de notas de entrada que tengan como destinatario al usuario provisto.
     * @param username el nombre de usuario del destinatario.
     * @return la lista de notas de entrada.
     */
    public List<NotaEntrada> getNotasEntradaDestinatario (String username)
    {
        Query query = em.createNamedQuery("buscarPorDestinatario");
        query.setParameter(1, username);
        return query.getResultList();
    }
    
    /**
     * Obtiene una lista de notas que tengan como destinatario al usuario asociado a la sesion ocn el codigo provisto, si es que existe y esta abierta.
     * @param codigo el codigo de sesion.
     * @return la lista de notas.
     */
    public List<NotaEntrada> getNotasEntradaSesion (String codigo)
    {
        SesionJpaController con = new SesionJpaController();
        
        Usuario usuario = con.getUsuarioSesion(codigo);
        
        if (usuario != null)
            return getNotasEntradaDestinatario(usuario.getUsuario());
        
        return null;
    }
    
    /**
     * Obtiene una lista de notas en base al usuario y la referencia.
     * @param usuario el destinatario.
     * @param referencia la referencia de la nota.
     * @return 
     */
    public List<NotaEntrada> getNotasEntradaUsuarioReferencia (String usuario, String referencia)
    {
        Query query = em.createNamedQuery("buscarPorDestinatarioYReferencia");
        query.setParameter(1, usuario);
        query.setParameter(2, referencia);
        return query.getResultList();
    }
    
    /**
     * Obtiene una lista de notas en base al codigo de sesion y la referencia.
     * @param codigo el codigo de sesion, debe ser una sesion abierta.
     * @param referencia la referencia de las notas.
     * @return 
     */
    public List<NotaEntrada> getNotasEntradaSesionReferencia (String codigo, String referencia)
    {
        SesionJpaController con = new SesionJpaController();
        Usuario usuario = con.getUsuarioSesion(codigo);
        
        if (usuario != null)
            return getNotasEntradaUsuarioReferencia(usuario.getUsuario(), referencia);
        
        return null;
    }
    
    /**
     * Obtiene una lista de notas sin leer de determinado usuario.
     * @param usuario el destinatario.
     * @return la lista de notas.
     */
    public List<NotaEntrada> getNotasEntradaNoLeidas (String usuario)
    {
        Query query = em.createNamedQuery("buscarNoLeidos");
        query.setParameter(1, usuario);
        return query.getResultList();
    }
    
    /**
     * Obtiene una lista de notas no leidas cuyo destinatario es el usuario de una sesion abierta.
     * @param codigo el codigo de la sesion, debe estar abierta.
     * @return la lista de notas.
     */
    public List<NotaEntrada> getNotasEntradaNoLeidasSesion (String codigo)
    {
        SesionJpaController con = new SesionJpaController();
        Usuario usuario = con.getUsuarioSesion(codigo);
        
        if (usuario != null)
            return getNotasEntradaNoLeidas(usuario.getUsuario());
        
        return null;
    }
}
